package test.controller;

import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.eweb4j.mvc.Context;
import org.eweb4j.mvc.action.ActionProp;
import org.eweb4j.mvc.action.QueryParams;
import org.eweb4j.mvc.config.bean.ActionConfigBean;

public class ContextController {

	// 声明了即可运行期注入使用,需提供setter方法
	private Context context;

	// 当前执行Action的配置对象，保存着个跟该Action相关的配置信息
	// 声明了即可运行期注入使用,需提供setter方法
	private ActionConfigBean acb;

	// 当前执行Action的Properties读写对象
	// start.xml中<file ID=Action完整类名的所对应的那个配置文件
	// 声明了即可运行期注入使用,需提供setter方法
	private ActionProp prop;

	// 声明了即可运行期注入使用,需提供setter方法
	private QueryParams qp;

	// 声明了即可运行期注入使用,需提供setter方法
	private HttpServletRequest req;
	// 声明了即可运行期注入使用,需提供setter方法
	private HttpSession session;
	// 声明了即可运行期注入使用,需提供setter方法
	private HttpServletResponse res;
	// 声明了即可运行期注入使用,需提供setter方法
	private ServletOutputStream out;
	// 声明了即可运行期注入使用,需提供setter方法
	private PrintWriter writer;

	public String doHelloWorld() throws Exception {

		// 当前执行Action的配置对象，保存着个跟该Action相关的配置信息
		ActionConfigBean acb = context.getMvcBean();

		// 当前执行Action的Properties读写对象
		// start.xml中<file ID=Action完整类名的所对应的那个配置文件
		ActionProp prop = context.getActionProp();
		prop.read("key");
		prop.write("key", "value");

		// url中的变量参数
		// users/{uid}/edit
		Map<String, String[]> ppm = context.getPathParamMap();
		ppm.get("uid");

		// Http 请求中的参数
		// users/list?pageNum=1&numPerPage=10
		Map<String, String[]> qpm = context.getQueryParamMap();
		qpm.get("pageNum");
		qpm.get("numPerPage");

		// 同上，这里主要是自定义一个类为了让开发者能够声明
		QueryParams qp = context.getQueryParams();

		// 当前执行Action对应的 URI
		String uri = context.getUri();

		// 当前执行Action时的HTTP METHOD
		String httpMethod = context.getHttpMethod();

		// 声明了即可运行期注入使用
		HttpServletRequest req = context.getRequest();
		// 声明了即可运行期注入使用
		HttpSession session = context.getSession();
		// 声明了即可运行期注入使用
		HttpServletResponse res = context.getResponse();
		// 声明了即可运行期注入使用
		ServletOutputStream out = context.getOut();
		// 声明了即可运行期注入使用
		PrintWriter writer = context.getWriter();

		return "Hello World !";
	}

	// setters...
}
